project(spice-server VERSION 0.1)
#spice_server_include += [include_directories('.')]
set(CMAKE_CXX_STANDARD 11)
#project

set(spice_server_include "${spice_server_include};${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}"
    )

#
# generate spice-version.h
#
#if meson.project_version().startswith('UNKNOWN')
#  major = '0'
#  minor = '0'
#  micro = '1'
#else
#  additional_commits = false
#  increment_micro = 0
#  # remove the "-dirty" from version, increment micro later if found
#  version_info = meson.project_version().split('-dirty')
#  if version_info.length() > 1
#    increment_micro = 1
#  endif
#  # remove the "-" from version, increment micro later if found
#  version_info = version_info[0].split('-')
#  if version_info.length() > 1
#    additional_commits = true
#    increment_micro = 1
#  endif
#  version_info = version_info[0].split('.')
#  if ((not additional_commits and version_info.length() != 3)
#    or (additional_commits and version_info.length() != 4))
#    error('Invalid version @0@'.format(meson.project_version()))
#  endif
#  major = '@0@'.format(version_info[0].to_int())
#  minor = '@0@'.format(version_info[1].to_int())
#  micro = '@0@'.format(version_info[2].to_int() + increment_micro)
#endif
#
#cmd = run_command('printf', ['0x%02x%02x%02x', major, minor, micro], check : true)
#version_data = configuration_data()
#version_data.set('SPICE_SERVER_VERSION', cmd.stdout().strip())
#spice_version_h = configure_file(input : 'spice-version.h.in',
#                                 output : 'spice-version.h',
#                                 configuration : version_data)
#

set(SPICE_SERVER_VERSION "0.0.1")
configure_file(spice-version.h.in.cmake spice-version.h)

##
## libspice-server.so
##
set(spice_server_headers
    ${CMAKE_CURRENT_BINARY_DIR}/spice-version.h
    spice-audio.h
    spice-char.h
    spice-core.h
    spice-input.h
    spice-migration.h
    spice-qxl.h
    spice-server.h
    spice-replay.h
    spice.h
  )

#
#install_headers(spice_server_headers, subdir : 'spice-server')
#
install(FILES ${spice_server_headers} DESTINATION spice-server)

## generate enums
#gnome = import('gnome')
#spice_server_enums = gnome.mkenums('spice-server-enums',
#                                   sources : 'spice-server.h',
#                                   symbol_prefix : 'SPICE',
#                                   c_template: 'spice-server-enums.c.tmpl',
#                                   h_template: 'spice-server-enums.h.tmpl')
#
message("GLIB_MKENUMS is " ${GLIB_MKENUMS})

execute_process(COMMAND ${GLIB_MKENUMS}
        --template ${CMAKE_CURRENT_SOURCE_DIR}/spice-server-enums.h.tmpl
        --symbol-prefix SPICE
        ${CMAKE_CURRENT_SOURCE_DIR}/spice-server.h
        --output spice-server-enums.h
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

execute_process(COMMAND ${GLIB_MKENUMS}
        --template ${CMAKE_CURRENT_SOURCE_DIR}/spice-server-enums.c.tmpl
        --symbol-prefix SPICE
        ${CMAKE_CURRENT_SOURCE_DIR}/spice-server.h
        --output spice-server-enums.c
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

set(spice_server_sources
    ${spice_server_headers}
    ${CMAKE_CURRENT_BINARY_DIR}/spice-server-enums.h
    ${CMAKE_CURRENT_BINARY_DIR}/spice-server-enums.c
    agent-msg-filter.c
    agent-msg-filter.h
    cache-item.h
    char-device.cpp
    char-device.h
    common-graphics-channel.cpp
    common-graphics-channel.h
    cursor-channel.cpp
    cursor-channel-client.cpp
    cursor-channel-client.h
    cursor-channel.h
    utils.hpp
    safe-list.hpp
    dcc.cpp
    dcc.h
    dcc-private.h
    dcc-send.cpp
    dispatcher.cpp
    dispatcher.h
    display-channel.cpp
    display-channel.h
    display-channel-private.h
    display-limits.h
    event-loop.c
    glib-compat.h
    glz-encoder.c
    glz-encoder-dict.c
    glz-encoder-dict.h
    glz-encoder.h
    glz-encoder-priv.h
    image-cache.cpp
    image-cache.h
    image-encoders.cpp
    image-encoders.h
    inputs-channel.cpp
    inputs-channel-client.cpp
    inputs-channel-client.h
    inputs-channel.h
    jpeg-encoder.c
    jpeg-encoder.h
    main-channel.cpp
    main-channel-client.cpp
    main-channel-client.h
    main-channel.h
    main-dispatcher.cpp
    main-dispatcher.h
    memslot.c
    memslot.h
    migration-protocol.h
    mjpeg-encoder.c
    net-utils.c
    net-utils.h
    pixmap-cache.cpp
    pixmap-cache.h
    red-channel.cpp
    red-channel-capabilities.c
    red-channel-capabilities.h
    red-channel-client.cpp
    red-channel-client.h
    red-channel.h
    red-client.cpp
    red-client.h
    red-common.h
    red-parse-qxl.cpp
    red-parse-qxl.h
    red-pipe-item.cpp
    red-pipe-item.h
    red-qxl.cpp
    red-qxl.h
    red-record-qxl.cpp
    red-record-qxl.h
    red-replay-qxl.cpp
    reds.cpp
    reds.h
    reds-private.h
    red-stream.cpp
    red-stream.h
    red-worker.cpp
    red-worker.h
    sound.cpp
    sound.h
    spice-bitmap-utils.c
    spice-bitmap-utils.h
    spicevmc.cpp
    spice-wrapped.h
    stat-file.c
    stat-file.h
    stat.h
    stream-channel.cpp
    stream-channel.h
    sys-socket.c
    sys-socket.h
    red-stream-device.cpp
    red-stream-device.h
    sw-canvas.c
    tree.cpp
    tree.h
    utils.c
    utils.h
    video-encoder.h
    video-stream.cpp
    video-stream.h
    websocket.c
    websocket.h
    zlib-encoder.c
    zlib-encoder.h
    )
#
#if spice_server_has_lz4 == true
#  spice_server_sources += ['lz4-encoder.c',
#                           'lz4-encoder.h']
#endif
if (${spice_server_has_lz4})
    list(APPEND spice_server_sources
        lz4-encoder.c
        lz4-encoder.h
        )
endif()

#
#if spice_server_has_smartcard == true
#  spice_server_sources += ['smartcard.cpp',
#                           'smartcard.h',
#                           'smartcard-channel-client.cpp',
#                           'smartcard-channel-client.h']
#endif
if (${spice_server_has_smartcard})
    list(APPEND spice_server_sources
        smartcard.cpp
        smartcard.h
        smartcard-channel-client.cpp
        smartcard-channel-client.h
        )
endif()

#
#if spice_server_has_gstreamer == true
#  spice_server_sources += ['gstreamer-encoder.c']
#endif
if (${spice_server_has_gstreamer})
    list(APPEND spice_server_sources
        gstreamer-encoder.c
        )
endif()
#
##
## custom link_args
##
#spice_server_syms = files('spice-server.syms')
#spice_server_syms_path = join_paths(meson.current_source_dir(), 'spice-server.syms')
#spice_server_link_args = ['-Wl,--no-copy-dt-needed-entries',
#                          '-Wl,-z,relro',
#                          '-Wl,-z,now',
#                          '-Wl,--version-script=@0@'.format(spice_server_syms_path)]
set(spice_server_link_args "-Wl,--no-copy-dt-needed-entries
                           -Wl,-z,relro
                           -Wl,-z,now
                           -Wl,--version-script=spice-server.syms")


#
#spice_server_libs = library('spice-server', spice_server_sources,
#                            version : spice_server_so_version,
#                            install : true,
#                            include_directories : spice_server_include,
#                            link_args : compiler.get_supported_link_arguments(spice_server_link_args),
#                            link_depends : spice_server_syms,
#                            dependencies : spice_server_deps,
#                            gnu_symbol_visibility : 'hidden')
#

message("in server, spice_server_include is " ${spice_server_include})
add_library(spice-server
    SHARED
    ${spice_server_sources}
    )

target_include_directories(spice-server
    PUBLIC
    ${spice_server_include}
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_BINARY_DIR}
        ${CMAKE_CURRENT_BINARY_DIR}/..
    )
target_link_libraries(spice-server
    PUBLIC
    ${spice_server_deps}
    spice-common
    spice-common-server
    )

option(tests "Build the test binaries" TRUE)
if (tests)
#if get_option('tests')
#  if get_option('default_library') == 'both'
#    spice_server_shared_lib = spice_server_libs.get_shared_lib()
#    spice_server_static_lib = spice_server_libs.get_static_lib()
#  elif get_option('default_library') == 'shared'
#    spice_server_shared_lib = spice_server_libs
#    # create static library extracting objects from shared one, avoid to
#    # install static library using both_libraries
#    spice_server_static_lib = static_library('spice-server-static',
#                                             objects: spice_server_libs.extract_all_objects(),
#                                             dependencies : spice_server_deps)
#  else
#    # here we use the static library to link to utilities (currently spice-server-replay)
#    spice_server_shared_lib = spice_server_libs
#    spice_server_static_lib = spice_server_libs
#  endif
  add_subdirectory(tests)
endif()
#
#pc = import('pkgconfig')
#pc.generate(spice_server_libs,
#            description : 'SPICE server library',
#            subdirs : 'spice-server',
#            requires : 'spice-protocol')
#
